package com.flower8.utils;

import com.flower8.sysconfig.constants.SysConstants;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Description: 图片上传ftp工具类
 * @Author: tanglin
 * @Date: 2019/10/08 14:03
 * @Version: 1.0
 */
@Component
public class ftpUtil {

    /**
     * 图片上传
     * @param pic 图片文件
     * @param flag
     * @return
     * @throws Exception
     */
    public static String uploadFile( MultipartFile pic,int flag)throws Exception {
        String returnPath = "";
        String host = "";
        FTPClient ftp = new FTPClient();//这是最开始引入的依赖里的方法
        ftp.setControlEncoding("utf-8");
        String fileName = pic.getOriginalFilename().substring(0,pic.getOriginalFilename().indexOf(".")); //获取图片名
        String suffixName = pic.getOriginalFilename().substring(pic.getOriginalFilename().lastIndexOf("."));//获取文件的后缀名
        System.out.println("文件名为："+fileName);
        fileName = MD5.md5(fileName) + suffixName;
        InputStream input = pic.getInputStream();
        try {
            int reply;
            ftp.connect(SysConstants.FTP_ADDRESS, SysConstants.FTP_PORT);// 连接FTP服务器
            //银行图标上传
            if(flag == 1){
                ftp.login(SysConstants.FTP_USERNAME, SysConstants.FTP_PASSWORD);// 登录
                ftp.changeWorkingDirectory(SysConstants.FTP_BASEPATH);//修改操作空间
                host = SysConstants.BANK_ICON_URL;
            }else if(flag == 2){  //banner图片上传
                ftp.login(SysConstants.BANNER_FTP_USERNAME, SysConstants.BANNER_FTP_PASSWORD);// 登录
                ftp.changeWorkingDirectory(SysConstants.BANNER_FTP_BASEPATH);//修改操作空间
                host = SysConstants.BANNER_URL;
            }else if(flag == 3){  //用户头像图片上传
                ftp.login(SysConstants.FTP_HEAD_USERNAME, SysConstants.FTP_HEAD_PASSWORD);// 登录
                ftp.changeWorkingDirectory(SysConstants.FTP_HEAD_BASEPATH);//修改操作空间
                host = SysConstants.HEAD_URL;
            }else if(flag == 4){  //积分商城商品图片上传
                ftp.login(SysConstants.FTP_POINT_USERNAME, SysConstants.FTP_POINT_PASSWORD);// 登录
                ftp.changeWorkingDirectory(SysConstants.FTP_POINT_BASEPATH);//修改操作空间
                host = SysConstants.POINT_URL;
            }else if(flag == 5){  //大转盘奖品图片上传
                ftp.login(SysConstants.FTP_AWARD_USERNAME, SysConstants.FTP_AWARD_PASSWORD);// 登录
                ftp.changeWorkingDirectory(SysConstants.FTP_AWARD_BASEPATH);//修改操作空间
                host = SysConstants.AWARD_URL;
            }else if(flag == 6){  //系统首页图片上传
                ftp.login(SysConstants.FTP_HOME_USERNAME, SysConstants.FTP_HOME_PASSWORD);// 登录
                ftp.changeWorkingDirectory(SysConstants.FTP_HOME_BASEPATH);//修改操作空间
                host = SysConstants.HOME_URL;
            }

            reply = ftp.getReplyCode();//连接成功会的到一个返回状态码
            //System.out.println(reply);//可以输出看一下是否连接成功
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
            ftp.enterLocalPassiveMode();
            ftp.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
            //对了这里说明一下你所操作的文件夹必须要有可读权限，chomd 777 文件夹名
            boolean status = ftp.storeFile(fileName, input);//这里开始上传文件
            //查看是否上传成功，之前用于判断上传成功的条件【!FTPReply.isPositiveCompletion(reply)】
            //System.out.println(status);
            if (!status) {
                ftp.disconnect();
                System.out.println("连接失败");
                return returnPath;
            }
            System.out.println("连接成功！");

            input.close();
            ftp.logout();
            returnPath = host + fileName;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
            ftp.disconnect();
        }
        return returnPath;
    }


    /**
     * 从FTP服务器删除图片
     * @param fileName  图片名称
     * @return
     */
    public static boolean delFile(String fileName,int flag) {
        boolean success = false;
        String remotePath = "";
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            if(flag != 7){  //图片服务器
                ftp.connect(SysConstants.FTP_ADDRESS, SysConstants.FTP_PORT);// 连接FTP服务器
            }else{  //html文件服务器
                ftp.connect(SysConstants.H5_FTP_ADDRESS, SysConstants.H5_FTP_PORT);// 连接FTP服务器
            }


            //银行图标上传
            if(flag == 1){
                ftp.login(SysConstants.FTP_USERNAME, SysConstants.FTP_PASSWORD);// 登录
                remotePath = SysConstants.FTP_BASEPATH + fileName;
            }else if(flag == 2){  //banner图片上传
                ftp.login(SysConstants.BANNER_FTP_USERNAME, SysConstants.BANNER_FTP_PASSWORD);// 登录
                remotePath = SysConstants.BANNER_FTP_BASEPATH + fileName;
            }else if(flag == 3){  //用户头像图片上传
                ftp.login(SysConstants.FTP_HEAD_USERNAME, SysConstants.FTP_HEAD_PASSWORD);// 登录
                remotePath = SysConstants.FTP_HEAD_BASEPATH + fileName;
            }else if(flag == 4){  //积分商城商品图片上传
                ftp.login(SysConstants.FTP_POINT_USERNAME, SysConstants.FTP_POINT_PASSWORD);// 登录
                remotePath = SysConstants.FTP_POINT_BASEPATH + fileName;
            }else if(flag == 5){  //大转盘奖品图片上传
                ftp.login(SysConstants.FTP_AWARD_USERNAME, SysConstants.FTP_AWARD_PASSWORD);// 登录
                remotePath = SysConstants.FTP_AWARD_BASEPATH + fileName;
            }else if(flag == 6){  //系统首页图片上传
                ftp.login(SysConstants.FTP_HOME_USERNAME, SysConstants.FTP_HOME_PASSWORD);// 登录
                remotePath = SysConstants.FTP_HOME_BASEPATH + fileName;
            }else if(flag == 7){  //删除渠道创建的推广页面
                ftp.login(SysConstants.H5_FTP_USERNAME, SysConstants.H5_FTP_PASSWORD);// 登录
                remotePath = SysConstants.H5_FTP_BASEPATH + fileName;
            }else if(flag == 11){  //删除身份证
                ftp.login(SysConstants.FTP_IDCARD_USERNAME, SysConstants.FTP_IDCARD_PASSWORD);// 登录
                if (fileName.startsWith(SysConstants.FTP_IDCARD_BASEPATH)) {
                    remotePath = fileName;
                } else {
                    remotePath = SysConstants.FTP_IDCARD_BASEPATH + fileName;
                }
            }

            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }

            ftp.deleteFile(remotePath);
            System.out.println("删除文件成功！");
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }


    /**
     * 上传html的文件
     * @param input
     * @param fileName
     * @return
     * @throws Exception
     */
    public static String uploadHtml( InputStream input,String fileName)throws Exception {
        String returnPath = "";
        FTPClient ftp = new FTPClient();//这是最开始引入的依赖里的方法
        ftp.setControlEncoding("utf-8");
        try {
            int reply;
            ftp.connect(SysConstants.H5_FTP_ADDRESS, SysConstants.H5_FTP_PORT);// 连接FTP服务器
            ftp.login(SysConstants.H5_FTP_USERNAME, SysConstants.H5_FTP_PASSWORD);// 登录
            ftp.changeWorkingDirectory(SysConstants.H5_FTP_BASEPATH);//修改操作空间

            reply = ftp.getReplyCode();//连接成功会的到一个返回状态码
            //System.out.println(reply);//可以输出看一下是否连接成功
            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//设置文件类型
            ftp.enterLocalPassiveMode();
            ftp.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
            //对了这里说明一下你所操作的文件夹必须要有可读权限，chomd 777 文件夹名
            boolean status = ftp.storeFile(fileName, input);//这里开始上传文件
            //查看是否上传成功，之前用于判断上传成功的条件【!FTPReply.isPositiveCompletion(reply)】
            //System.out.println(status);
            if (!status) {
                ftp.disconnect();
                System.out.println("连接失败");
                return returnPath;
            }
            System.out.println("连接成功！");

            input.close();
            ftp.logout();
            returnPath = SysConstants.H5_HOST_URL + fileName;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
            ftp.disconnect();
        }
        return returnPath;
    }


    public static void main(String[] args) {
        System.out.println(delFile("jifen3000.png", 6));
    }
}
